/**
  ******************************************************************************
  * @file    dev_uart.h
  * @author  Yun
  * @version V1.0.0
  * @date    2025-02-21
  * @brief   UART设备驱动模块头文件
  * @license EULA (End User License Agreement)
  *          Copyright (c) 2025 星瑜科技自动化 Co., Ltd. All rights reserved.
  ******************************************************************************
  */

#ifndef FRAMEWORK_DEV_UART_H
#define FRAMEWORK_DEV_UART_H

#ifdef __cplusplus
extern "C" {
#endif

/*---------------------- Includes ----------------------*/
#include "dev_common_type.h"
#include "uart_slow_interface.h"

/*---------------------- 类型定义 ----------------------*/
/**
  * @brief  UART工作模式枚举
  */
enum Dev_Uart_Mode{
    DEV_UART_MASTER = 0,    /*!< 主机模式 */
    DEV_UART_SLAVE,         /*!< 从机模式 */
};

/**
  * @brief  UART设备配置结构体
  */
typedef struct Dev_Uart_Config {
    struct Dev_Uart_Config* pstNext;                 /*!< 链表下一个节点 */
    void* pHwCfg;                                    /*!< 硬件配置指针 */
    Uart_Slow_Interface_TypeDef* pstDevUartInterface; /*!< 操作接口指针 */
    uint8_t* pu8RxBuffer;                            /*!< 接收缓冲区指针 */
    uint8_t* pu8TxBuffer;                            /*!< 发送缓冲区指针 */
    uint16_t u16RxBufSize;                           /*!< 接收缓冲区大小 */
    uint16_t u16TxBufSize;                           /*!< 发送缓冲区大小 */
    uint16_t u16Timeout;                             /*!< 操作超时时间(ms) */
    uint8_t u8InitState:1;                       /*!< 初始状态 */
    uint8_t u8RunState:1;                            /*!< 运行状态 */
    uint8_t u8LockState:1;                          /*!< 锁定状态 */
} Dev_Uart_Cfg_TypeDef;

/*---------------------- 全局变量 ----------------------*/
extern Dev_Uart_Cfg_TypeDef* stDevUartCfgNodeHead; /*!< UART设备链表头指针 */

/*---------------------- 设备操作API ----------------------*/
/**
  * @brief  注册UART设备
  * @param  pstConfig: UART设备配置结构体指针
  * @param  pHwCfg: 硬件配置指针
  * @param  pstDevUartInterface: 操作接口指针
  * @retval DEV_Status_TypeDef 操作状态码
  * @note   自动触发EVENT_DEV_UART_RX事件
  */
uint8_t Dev_Uart_Register(Dev_Uart_Cfg_TypeDef* pstConfig,
                          void* pHwCfg,
                          Uart_Slow_Interface_TypeDef* pstDevUartInterface);

/**
  * @brief  发送数据
  * @param  pstConfig: UART设备配置结构体指针
  * @param  pu8Data: 发送数据指针
  * @param  u16Len: 数据长度
  * @retval DEV_Status_TypeDef 操作状态码
  * @note   操作成功会触发EVENT_DEV_UART_TX事件
  */
uint8_t Dev_Uart_Transmit(Dev_Uart_Cfg_TypeDef* pstConfig,
                          uint8_t* pu8Data,
                          uint16_t u16Len);

/**
  * @brief  接收数据
  * @param  pstConfig: UART设备配置结构体指针
  * @param  pu8Data: 接收数据指针
  * @param  pu16Len: 实际接收长度指针
  * @retval DEV_Status_TypeDef 操作状态码
  */
uint8_t Dev_Uart_Receive(Dev_Uart_Cfg_TypeDef* pstConfig,
                         uint8_t* pu8Data,
                         uint16_t* pu16Len);

/**
  * @brief  设置波特率
  * @param  pstConfig: UART设备配置结构体指针
  * @param  u32Baudrate: 目标波特率
  * @retval DEV_Status_TypeDef 操作状态码
  */
uint8_t Dev_Uart_SetBaudrate(Dev_Uart_Cfg_TypeDef* pstConfig,
                             uint32_t u32Baudrate);

#ifdef __cplusplus
}
#endif

#endif /* FRAMEWORK_DEV_UART_H */

/************************ (C) COPYRIGHT 星瑜科技自动化 *****END OF FILE****/
